import utils from "@/utils/utils.js";
//腾讯的Key
let tengXunKey = "Z3PBZ-RIXRM-OB66T-6TPXJ-XGPM6-ZDBY6"
//高德key 280802ed0116fef931dbcf5e7e9278d7 7151c2098c5942e581334bffb93b0a88
//小程序  45498100f2c47b63d4c7b8a8f60e999f
//web服务 24a14eba12dcfd8ccac6d5cce21f7879
const gaoDeKey = '24a14eba12dcfd8ccac6d5cce21f7879'

export default {
  //腾讯地图的经纬度转成高德地图经纬度
  convertTencentToGaode(lat, lng) {
    return new Promise((resolve, reject) => {
      let url = `https://apis.map.qq.com/ws/coord/v1/translate?locations=${lat},${lng}&type=3&key=${tengXunKey}`
      uni.request({
        header: {
          "Content-Type": "application/text"
        },
        //注意:这里的key值需要高德地图的 web服务生成的key  只有web服务才有逆地理编码
        url,
        success(re) {
          if (re.data.status == 0) {
            resolve({
              latitude: re.data.locations[0].lat,
              longitude: re.data.locations[0].lng
            })
          } else {
            reject("转换失败")
          }
        }
      });
    })
  },

  //高德地图获取当前经纬度
  getCurrentAddress() {
    return new Promise((resolve, reject) => {
      let url = `https://restapi.amap.com/v3/ip?key=${gaoDeKey}`
      uni.request({
        header: {
          "Content-Type": "application/text"
        },
        //注意:这里的key值需要高德地图的 web服务生成的key  只有web服务才有逆地理编码
        url,
        success(re) {
          const { status, rectangle } = re.data;
          if (status === '1') {
            const [lng, lat] = rectangle.split(';')[0].split(',');
            let location = {
              latitude: lat,
              longitude: lng
            }
            console.log("高德获取到的", location)
            //uni.setStorageSync('location', location)
            resolve(location)
          } else {
            console.log('Failed to get current location')
            reject('Failed to get current location')
          }
        }
      });
    })
  },

  //根据经纬度获取省市区
  getCityInfo(longitude, latitude) {
    return new Promise((resolve, reject) => {
      let url = `https://restapi.amap.com/v3/geocode/regeo?output=JSON&location=${longitude},${latitude}&key=${gaoDeKey}&radius=1000&extensions=all`
      uni.request({
        header: {
          "Content-Type": "application/text"
        },
        //注意:这里的key值需要高德地图的 web服务生成的key  只有web服务才有逆地理编码
        url,
        success(re) {
          if (re.statusCode === 200) {
            console.log("获取中文街道地理位置成功", re.data.regeocode)
            resolve(re.data.regeocode)
          } else {
            console.log("获取信息失败，请重试！")
          }
        }
      });
    })
  },


  //根据腾讯获取到的GCJ02经纬度与高德获取到的GCJ02经纬度进行距离计算
  distanceTx(lat1, lon1, lat2, lon2) {
    return new Promise((resolve, reject) => {
      const R = 6371; // 地球半径，单位为千米
      const dLat = (lat2 - lat1) * (Math.PI / 180); // 将经度转换为弧度
      const dLon = (lon2 - lon1) * (Math.PI / 180); // 将纬度转换为弧度
      const a =
        Math.sin(dLat / 2) * Math.sin(dLat / 2) +
        Math.cos(lat1 * (Math.PI / 180)) *
        Math.cos(lat2 * (Math.PI / 180)) *
        Math.sin(dLon / 2) *
        Math.sin(dLon / 2);
      const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
      const distance = R * c; // 计算距离，单位为千米
      resolve(distance);
    })
  },

  //获取两个经纬度之间的距离
  getDistance(lat1, lon1, lat2, lon2) {
    return new Promise((resolve, reject) => {
      function toRadians(degrees) {
        return degrees * (Math.PI / 180);
      }
      const earthRadius = 6371; // 地球半径，单位为公里
      const dLat = toRadians(lat2 - lat1);
      const dLon = toRadians(lon2 - lon1);
      const a =
        Math.sin(dLat / 2) * Math.sin(dLat / 2) +
        Math.cos(toRadians(lat1)) *
        Math.cos(toRadians(lat2)) *
        Math.sin(dLon / 2) *
        Math.sin(dLon / 2);
      const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
      const distance = earthRadius * c;
      resolve(distance);
    })
  },

  //获取省市区街道
  async getAreas(keywords, subdistrict) {
    return new Promise((resolve, reject) => {
      //国家、省/直辖市、市、区/县、乡镇/街道多级    0、1、2、3
      let url = utils.buildUrl("https://restapi.amap.com/v3/config/district", {
        key: "4d82d8b7708b3f1677582c023e0086f7",
        keywords: keywords ? keywords : "",
        subdistrict: subdistrict ? subdistrict : 3
      })
      uni.request({
        url,
        data: {},
        success(response) {
          const data = response.data.districts;
          resolve(data);
        }
      });
    })
  },

  //高德地图的周边搜索
  getNearbyPetHospitals(data) {
    // key：开发者密钥，用于访问高德地图API的身份认证。
    // location：中心点坐标，格式为经度, 纬度，例如：116.473168, 39.993015。
    // keywords：搜索关键词，多个关键词用竖线分隔，例如：餐饮 | 美食。
    // types：POI类型，多个类型用竖线分隔，例如：餐饮服务 | 中餐厅。
    // radius：搜索半径，单位为米，默认为1000。
    // extensions：返回结果的扩展信息，可选值为base、all，默认为base。
    // offset：每页显示结果数量，默认为20。
    // page：当前页数，默认为1。
    // sortrule：排序规则，可选值为distance、weight，默认为distance。
    // city：城市名称，可选值为城市中文名、城市拼音、citycode，默认为全国范围。
    // citylimit：是否限制在当前城市范围内搜索，可选值为true、false，默认为false。
    return new Promise((resolve, reject) => {
      let url = `https://restapi.amap.com/v3/place/around`
      const params = {
        key: gaoDeKey,
        radius: 5000,
        offset: 20,
        page: 1,
        extensions: 'base',
      };
      uni.request({
        url,
        data: { ...params, ...data },
        success(response) {
          const data = response.data;
          if (data.status === '1' && data.count > 0) {
            resolve(data.pois)
          } else {
            console.log('获取周边错误', data.info);
          }
        }
      });
    })
  }
}